﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.server.utils;

namespace l1cs.server.model.map
{
    public class L1WorldMap
    {
        private static Logger _log = Logger.getLogger( typeof( L1WorldMap ).FullName );

        private static L1WorldMap _instance;
        private Dictionary<int, L1Map> _maps;

        public static L1WorldMap getInstance()
        {
            if ( _instance == null )
            {
                _instance = new L1WorldMap();
            }
            return _instance;
        }

        private L1WorldMap()
        {
            PerformanceTimer timer = new PerformanceTimer();
            _log.info( "loading map..." );

            MapReader min = MapReader.getDefaultReader();

            _maps = min.read();
            if ( _maps == null )
            {
                throw new Exception( "マップの読み込みに失敗" );
            }

            _log.info( "OK! " + timer.get() + "ms" );
        }

        /// <summary>
        /// 指定されたマップの情報を保持するL1Mapを返す。
        /// </summary>
        /// <param name="mapId">マップID</param>
        /// <returns>マップ情報を保持する、L1Mapオブジェクト。</returns>
        public L1Map getMap( short mapId )
        {/*TTOK*/
            L1Map map;
            _maps.TryGetValue( mapId, out map );
            if ( map == null )
            {
                // マップ情報が無い
                map = L1Map.newNull(); // 何もしないMapを返す。
            }
            return map;
        }
    }

}
